/**
 * @param {string} path
 * @returns {Boolean}
 */
export function isExternal(path) {
  return /^(https?:|mailto:|tel:)/.test(path);
}

export const canNotEmptyAndChar = ({ message = "不能为空", trigger = ["blur", "change"] }) => {
  return [
    { required: true, message, trigger },
    {
      validator: (rule, value, callback) => {
        if (typeof value == "string" && !value.trim()) {
          callback(message);
        } else if (/[^_\u4e00-\u9fa5a-zA-Z0-9]/.test(value)) {
          callback("输入内容必须是数字、字母、中文或者_");
        } else {
          callback();
        }
      },
    },
  ];
};

/**
 * @description 20位数字最多8位小数
 * @param val
 * @returns {boolean}
 */
export function num20Float8(val) {
  return /^(?!(?:\D*\d){21,})\d{0,20}(?:\.\d{1,8})?$/.test(val);
}

/**
 * @description 10位数字最多8位小数
 * @param val
 * @returns {boolean}
 */
export function num10Float8(val) {
  return /^(?!(?:\D*\d){11,})\d{0,10}(?:\.\d{1,8})?$/.test(val);
}

/**
 * @description 10位数字不支持小数点
 * @returns {boolean}
 */
export function num10(val) {
  return /^\d{0,10}$/.test(val);
}

/**
 * @description 0-5 最多8为小数
 * @param val
 * @returns {boolean}
 */
export function score5Float8(val) {
  return /^(?:[0-5])(?:\.\d{1,8})?$/.test(val);
}

/**
 * @description 除 - _ 外的特殊字符
 * @param val
 * @returns {boolean}
 */
export function isSpecialCharacter(val) {
  return /[`~!@#$%^&*()+=<>?:"{}|,./;'\\[\]·~！@#￥%……&*（）——\-+={}|《》？：“”【】、；‘'，。、]/im.test(val);
}

export function isInsetFields(val) {
  return /(?<=#\{)(.*?)(?=\})/gi.test(val);
}

/**
 * 是否是http
 * @param val
 * @returns {boolean}
 */
export function isHttpUrl(val) {
  return /^https?:\/\/(([a-zA-Z0-9_-])+(\.)?)*(:\d+)?(\/((\.)?(\?)?=?&?[a-zA-Z0-9_-](\?)?)*)*$/i.test(val);
}

var protocolAndDomainRE = /^(?:\w+:)?\/\/(\S+)$/;
var localhostDomainRE = /^localhost[:?\d]*(?:[^:?\d]\S*)?$/;
var nonLocalhostDomainRE = /^[^\s.]+\.\S{2,}$/;
/**
 * 是否是http，可以带查询参数等
 * @param val
 * @returns {boolean}
 */
export function isHttpUrlFull(url) {
  if (typeof url !== "string") {
    return false;
  }

  var match = url.match(protocolAndDomainRE);
  if (!match) {
    return false;
  }

  var everythingAfterProtocol = match[1];
  if (!everythingAfterProtocol) {
    return false;
  }
  return localhostDomainRE.test(everythingAfterProtocol) || nonLocalhostDomainRE.test(everythingAfterProtocol);
}
